﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Sped.Sped
{
    /// <summary>
    /// REGISTRO 0150: TABELA DE CADASTRO DO PARTICIPANTE
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SpedPisCofins.Reg0150")]
    [ComVisible(true)]
    public class Reg0150 : IBloco
    {
        /// <summary>
        /// Código de identificação do participante no arquivo
        /// </summary>
        public string COD_PART { get; set; }
        /// <summary>
        /// Nome pessoal ou empresarial do participante
        /// </summary>
        public string NOME { get; set; }
        /// <summary>
        /// Código do país do participante, conforme a tabela indicada no item 3.2.1.
        /// </summary>
        public string COD_PAIS { get; set; }
        /// <summary>
        /// CNPJ do participante.
        /// </summary>
        public string CNPJ { get; set; }
        /// <summary>
        /// CPF do participante
        /// </summary>
        public string CPF { get; set; }
        /// <summary>
        /// Inscrição Estadual do participante
        /// </summary>
        public string IE { get; set; }
        /// <summary>
        /// Código do município, conforme a tabela IBGE
        /// </summary>
        public string COD_MUN { get; set; }
        /// <summary>
        /// Número de inscrição do participante na Suframa
        /// </summary>
        public string SUFRAMA { get; set; }
        /// <summary>
        /// Logradouro e endereço do imóvel
        /// </summary>
        public string END { get; set; }
        /// <summary>
        /// Número do imóvel
        /// </summary>
        public string NUM { get; set; }
        /// <summary>
        /// Dados complementares do endereço
        /// </summary>
        public string COMPL { get; set; }
        /// <summary>
        /// Bairro em que o imóvel está situado
        /// </summary>
        public string BAIRRO { get; set; }


        public override bool ValidaRegistro(ref string Erro)
        {
            var ValidacaoOK = true;
            Erro = "";

            if (string.IsNullOrEmpty(this.COD_PART))
            {
                this.COD_PART = string.Empty;
                Erro += "\r\n* Registro 0150 - Código do Partitipante não informado.";
                ValidacaoOK = false;
            }

            if (string.IsNullOrEmpty(this.NOME))
            {
                this.NOME = string.Empty;
                Erro += "\r\n* Registro 0150 - Nome pessoal ou empresarial do participante não informado.";
                ValidacaoOK = false;
            }

            if (string.IsNullOrEmpty(this.CNPJ))
                this.CNPJ = string.Empty;

            if (string.IsNullOrEmpty(this.CPF))
                this.CPF = string.Empty;

            if (string.IsNullOrEmpty(this.IE))
                this.IE = string.Empty;

            if (string.IsNullOrEmpty(this.COD_MUN))
                this.COD_MUN = string.Empty;

            if (string.IsNullOrEmpty(this.SUFRAMA))
                this.SUFRAMA = string.Empty;

            if (string.IsNullOrEmpty(this.END))
                this.END = string.Empty;

            if (string.IsNullOrEmpty(this.NUM))
                this.NUM = string.Empty;

            if (string.IsNullOrEmpty(this.COMPL))
                this.COMPL = string.Empty;

            if (string.IsNullOrEmpty(this.BAIRRO))
                this.BAIRRO = string.Empty;

            if (string.IsNullOrEmpty(this.CNPJ) && string.IsNullOrEmpty(this.CPF))
            {
                Erro += "\r\n* Registro 0150 - Deve ser informado ou CNPJ ou CPF para o Participante.";
                ValidacaoOK = false;
            }

            return ValidacaoOK;
        }

        public override string Layout()
        {
            var Linha = string.Empty;

            Linha += "0150" + this.Delimitador;
            Linha += this.COD_PART.Trim() + this.Delimitador;
            Linha += this.NOME.Trim().TirarAcento() + this.Delimitador;
            Linha += this.COD_PAIS.Trim() + this.Delimitador;
            Linha += this.CNPJ.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.CPF.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.IE.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.COD_MUN.Trim() + this.Delimitador;
            Linha += this.SUFRAMA.Trim().removeFormatacao() + this.Delimitador;
            Linha += this.END.Trim().TirarAcento() + this.Delimitador;
            Linha += this.NUM.Trim().TirarAcento() + this.Delimitador;
            Linha += this.COMPL.Trim().TirarAcento() + this.Delimitador;
            Linha += this.BAIRRO.Trim().TirarAcento() + this.Delimitador;

            return Linha.Trim();
        }
    }
}
